/*
 *
0x563c400ed154 0x563c400ed154 0x563c400ed154
111
111
111

 */

#include <iostream>
using namespace std;

class Singleton{
private:
	int item;
	static Singleton single;
	//构造函数私有
	Singleton(int item = 0){
		this->item = item;
	}
	//拷贝构造函数私有(无函数内容)：如果不重新定义且放在private修饰符下，则代码可能会通过默认公有的拷贝构造函数构造新的Singleton对象。
	Singleton(const Singleton& that){}
public:
	static Singleton& getInstance(){
		return single;
	}
	void print(){
		cout << item << endl;
	}
};
//第一个Singleton是single变量类型
//第二个Singleton是作用域
//定义且初始化
Singleton Singleton::single = 111;

int main(void){

	Singleton& single1 = Singleton::getInstance();
	Singleton& single2 = Singleton::getInstance();
	Singleton& single3 = Singleton::getInstance();

	//观察是不是同一个对象
	cout << &single1 << " " << &single2 << " " << &single3 << endl;

	single1.print();
	single2.print();
	single3.print();

	return 0;	
}
